var token;
var getToken = function(){
	$.ajax({
		type: "POST",
		url: "getToken.php",
		cache:false,
		dataType: "json",
		success: function (o){
			token = "Bearer " + encodeURIComponent(o.access_token);
		},
		error: function(xhr, textStatus, errorThrown){
			// 失敗した場合は10秒後に繰り返す
			setTimeout(getToken(),10000);
		}
	});
};

var loading = function(t){
	if(t){
		$('#loading').fadeOut(500,function(){$(this).remove()});
	}else {
		var l = '<div id="loading"><p>翻訳中...</p></div>';
		$('body').append(l);
		$('#loading').fadeIn(300);
	}
}

var setTranslater = function(){
	
	getToken();

	// tokenの有効期限が10分間のため、500秒ごとに取得を繰り返す
	setInterval(getToken,500000);
	
	$('.formTable td').each(function(){
		if(
			$(this).find('input[type=text]').not(" .hasDatepicker , .text_date , .text_short , .short , .noTranslate").size() == 1 || 
			$(this).find('textarea').size() == 1
		){
			var i = ($('textarea',this).size() != 0) ? $('textarea',this) : $('input',this);
			i.bind('keyup focus',function(){
				var val = $(this).val();
				if(val != "" && val.match( /[^A-Za-z\s.-]+/ ) && val.match( /[^0-9]+/ )){
					var l = $(this).offset().left+$(this).width()-134;
					var t = $(this).offset().top-$('#content').offset().top-26;
					$(this).closest('td').find(".translate_btns").css({"left":l+"px","top":t+"px"}).show();
				} else {
					$(this).closest('td').find(".translate_btns").hide();
				}
			});
			
			i.bind('blur',function(){
				$(this).closest('td').find(".translate_btns").fadeOut(100);
			});
			
			var html = '<ul class="translate_btns"> \
				<li><a class="translate" rel="en" href="javascript:;">英</a></li> \
				<li><a class="translate" rel="zh-cn" href="javascript:;">中</a></li> \
				<li><a class="translate" rel="ko" href="javascript:;">韓</a></li> \
				<li><a class="translate" rel="fr" href="javascript:;">仏</a></li> \
				<li><a class="translate" rel="it" href="javascript:;">伊</a></li> \
			</ul>';
			$(this).append(html);
		}
	});
	
	$('.translate').click(function(){
		
		if(!token){return;}
		
		var p 		= $(this).closest("td");
		var i 		= ($('input[type=text]',p).size() > 0) ? $('input[type=text]',p).first() : $('textarea',p).first();
		var val 	= i.val();
		var to 		= $(this).attr('rel');
		
		if($.data(this,'recent') != val){    
			loading();                                                                                                                  
			$.ajax({
			type: "GET",
				url: "http://api.microsofttranslator.com/V2/Ajax.svc/Translate",
				dataType: "jsonp",
				data:"appId=" + token + "&text=" + val + "&from=ja&to=" + to + "&contentType=text/plain",
				jsonp: "oncomplete",
				success: function(data, dataType){
					loading(true);
					if($('.result_' + to,p).size() > 0){
						$('.result_' + to,p).val(data);
					}else{
						i.clone(false).addClass("result_"+to).val(data).attr("name",i.attr("name") + "_" + to).insertAfter(i);
						$('<br />').insertAfter(i);
					}
				},
				error: function(xhr, textStatus, errorThrown){
					loading(true);
					$("body").append("<div id='righttopmsg' class='error'>" + textStatus + ' ' + errorThrown + "</div>");
					$('#righttopmsg').show(300,function(){
						$('#righttopmsg').delay(2000).fadeOut(300,function(){$(this).remove();});
					});
				}
			});
			$.data(this,'recent',val);
			
		}
	});
}